/*
 * @Descripttion:
 * @version:
 * @Author: ChenXiang
 * @Date: 2021-03-22 16:18:10
 * @LastEditors: ChenXiang
 * @LastEditTime: 2021-07-23 15:55:42
 */
// 对数据进行脱敏处理，str-原始字符串，beginLen-开始部分需要保留的位置，endLen-结尾位置需要保留的部分
export default {
  desensitization: (str, beginLen, endLen) => {
    if (!str) {
      return "";
    }
    str = String(str);
    const len = str.length;
    const firstStr = str.substr(0, beginLen);
    const lastStr = str.substr(endLen);
    const middleStr = str
      .substring(beginLen, len - Math.abs(endLen))
      .replace(/[\s\S]/gi, "*");
    return firstStr + middleStr + lastStr;
  },

  // 将阿拉伯数字翻译成中文的大写数字
  numberToChinese: (num) => {
    const AA = [
      "零",
      "一",
      "二",
      "三",
      "四",
      "五",
      "六",
      "七",
      "八",
      "九",
      "十",
    ];
    const BB = ["", "十", "百", "仟", "萬", "億", "点", ""];
    const a: any = ("" + num).replace(/(^0*)/g, "").split(".");
    let k = 0;
    let re = "";
    for (let i = a[0].length - 1; i >= 0; i--) {
      switch (k) {
        case 0:
          re = BB[7] + re;
          break;
        case 4:
          if (!new RegExp("0{4}//d{" + (a[0].length - i - 1) + "}$").test(a[0]))
            re = BB[4] + re;
          break;
        case 8:
          re = BB[5] + re;
          BB[7] = BB[5];
          k = 0;
          break;
      }
      if (k % 4 === 2 && a[0].charAt(i + 2) !== 0 && a[0].charAt(i + 1) === 0)
        re = AA[0] + re;
      if (a[0].charAt(i) !== 0) re = AA[a[0].charAt(i)] + BB[k % 4] + re;
      k++;
    }

    if (a.length > 1) {
      // 加上小数部分(如果有小数部分)
      re += BB[6];
      for (let i = 0; i < a[1].length; i++) re += AA[a[1].charAt(i)];
    }
    if (re === "一十") re = "十";
    if (re.match(/^一/) && re.length === 3) re = re.replace("一", "");
    return re;
  },

  // 数字范围
  numberRange(value, max, mix = 0) {
    if (value === "" || value === undefined) {
      return true;
    }
    if (value < mix) {
      return false;
    }
    return max >= value;
  },

  // 将数字转换为中文金额
  changeToChinese: (Num) => {
    // 判断如果传递进来的不是字符的话转换为字符
    if (typeof Num === "number") {
      Num = String(Num);
    }
    Num = Num.replace(/,/g, ""); // 替换tomoney()中的“,”
    Num = Num.replace(/ /g, ""); // 替换tomoney()中的空格
    Num = Num.replace(/￥/g, ""); // 替换掉可能出现的￥字符
    if (isNaN(Num)) {
      // 验证输入的字符是否为数字
      // alert("请检查小写金额是否正确");
      return "";
    }
    // 字符处理完毕后开始转换，采用前后两部分分别转换
    const part = String(Num).split(".");
    let newchar = "";
    // 小数点前进行转化
    for (let i = part[0].length - 1; i >= 0; i--) {
      if (part[0].length > 10) {
        return "";
        // 若数量超过拾亿单位，提示
      }
      let tmpnewchar = "";
      const perchar: any = part[0].charAt(i);
      switch (perchar) {
        case "0":
          tmpnewchar = "零" + tmpnewchar;
          break;
        case "1":
          tmpnewchar = "壹" + tmpnewchar;
          break;
        case "2":
          tmpnewchar = "贰" + tmpnewchar;
          break;
        case "3":
          tmpnewchar = "叁" + tmpnewchar;
          break;
        case "4":
          tmpnewchar = "肆" + tmpnewchar;
          break;
        case "5":
          tmpnewchar = "伍" + tmpnewchar;
          break;
        case "6":
          tmpnewchar = "陆" + tmpnewchar;
          break;
        case "7":
          tmpnewchar = "柒" + tmpnewchar;
          break;
        case "8":
          tmpnewchar = "捌" + tmpnewchar;
          break;
        case "9":
          tmpnewchar = "玖" + tmpnewchar;
          break;
      }
      switch (part[0].length - i - 1) {
        case 0:
          tmpnewchar = tmpnewchar + "元";
          break;
        case 1:
          if (perchar !== 0) tmpnewchar = tmpnewchar + "拾";
          break;
        case 2:
          if (perchar !== 0) tmpnewchar = tmpnewchar + "佰";
          break;
        case 3:
          if (perchar !== 0) tmpnewchar = tmpnewchar + "仟";
          break;
        case 4:
          tmpnewchar = tmpnewchar + "万";
          break;
        case 5:
          if (perchar !== 0) tmpnewchar = tmpnewchar + "拾";
          break;
        case 6:
          if (perchar !== 0) tmpnewchar = tmpnewchar + "佰";
          break;
        case 7:
          if (perchar !== 0) tmpnewchar = tmpnewchar + "仟";
          break;
        case 8:
          tmpnewchar = tmpnewchar + "亿";
          break;
        case 9:
          tmpnewchar = tmpnewchar + "拾";
          break;
      }
      newchar = tmpnewchar + newchar;
    }
    // 小数点之后进行转化
    if (Num.indexOf(".") !== -1) {
      if (part[1].length > 2) {
        // alert("小数点之后只能保留两位,系统将自动截断");
        part[1] = part[1].substr(0, 2);
      }
      for (let i = 0; i < part[1].length; i++) {
        let tmpnewchar = "";
        const perchar = part[1].charAt(i);
        switch (perchar) {
          case "0":
            tmpnewchar = "零" + tmpnewchar;
            break;
          case "1":
            tmpnewchar = "壹" + tmpnewchar;
            break;
          case "2":
            tmpnewchar = "贰" + tmpnewchar;
            break;
          case "3":
            tmpnewchar = "叁" + tmpnewchar;
            break;
          case "4":
            tmpnewchar = "肆" + tmpnewchar;
            break;
          case "5":
            tmpnewchar = "伍" + tmpnewchar;
            break;
          case "6":
            tmpnewchar = "陆" + tmpnewchar;
            break;
          case "7":
            tmpnewchar = "柒" + tmpnewchar;
            break;
          case "8":
            tmpnewchar = "捌" + tmpnewchar;
            break;
          case "9":
            tmpnewchar = "玖" + tmpnewchar;
            break;
        }
        if (i === 0) tmpnewchar = tmpnewchar + "角";
        if (i === 1) tmpnewchar = tmpnewchar + "分";
        newchar = newchar + tmpnewchar;
      }
    }
    // 替换所有无用汉字
    while (newchar.search("零零") !== -1)
      newchar = newchar.replace("零零", "零");
    newchar = newchar.replace("零亿", "亿");
    newchar = newchar.replace("亿万", "亿");
    newchar = newchar.replace("零万", "万");
    newchar = newchar.replace("零元", "元");
    newchar = newchar.replace("零角", "");
    newchar = newchar.replace("零分", "");
    if (newchar.charAt(newchar.length - 1) === "元") {
      newchar = newchar + "整";
    }
    return newchar;
  },
  // 生成范围内的随机数
  random: function (min, max) {
    if (arguments.length === 2) {
      return Math.floor(min + Math.random() * (max + 1 - min));
    } else {
      return null;
    }
  },
};
